RSMS suite — master task list (TODO / in progress)
Living document. Only open work belongs here — remove items when shipped or consciously dropped. Completed migration work (Table + JSON writers, DuckDB retirement, prefetch v1, etc.) is not duplicated.
For normative contracts see rsms-results-storage-design and ssot/rsms-ssot.json.
References to other trackers (completed work lives there only as checklist history)
Worker & queue (rsms-worker-function)
| Status | Task | Notes |
|---|
| [ ] | Queue visibility renewal | Long RSMS runs can exceed RSMS_WORKER_VISIBILITY_TIMEOUT_SEC. queue_worker.py does not call update_message_visibility yet (see rsms-worker-implementation-plan.md W4 timeouts row). Decide renewal loop vs extending default timeout ops-only. |
| [ ] | Tributary mainstem intersection — source of truth | mainstem.py / app/results/mainstem_intersection.py only define Kanawha River → 716.2; ctl_builder.write_ctl_and_placeholders still writes SPILL_RIVER_MILE from resolve_mainstem_intersection for tributary spills (separate from RMI_STRUCTURE_FILE). Verify whether junction miles are fully encoded in the per-basin .rmi / RiverMileIndex.csv blob (and can replace the static map + optional scenario field), or whether each enabled tributary needs an explicit value. Run at least one non-Kanawha tributary spill end-to-end and document the contract. |
API (rsms-api-fastapi)
| Status | Task | Notes |
|---|
| [ ] | GET …/results/edge-profile | Router returns 404 and directs clients to edge-timeseries. Decide: implement profile slice for legacy parity, 410 Gone, or leave as-is and align docs/clients. |
| [ ] | Results performance | Optional: stricter request timeouts, shallow caching, or perf notes per environment (only if measured need). |
Results integrity & UX
| Status | Task | Notes |
|---|
| [ ] | Plume river-mile axis (empty RM arrays) | rsms-plume-river-mile-axis-known-issue — investigation parked; blocks dual-axis CXPLT when mainstem_river_mile/tributary_river_mile are []. |
| [ ] | Simulation hour float precision (UI vs API) | CXPLT hour slider shows whole hours; hour state / GET …/export/geojson?hour= can carry IEEE noise (e.g. 11.690000000000001 on Results Download GeoJSON label). Likely slider ↔ domain rounding mismatch; align with JSON_ROUND_HOURS_DECIMAL_PLACES / round_hour_coordinate end-to-end (API query param, React state, button copy). |
| [ ] | Legacy charts 2 & 5 (full CTPLT parity) | Product/science backlog — consumes same float32 grid as MVP charts; deferred section in ssot/rsms-ssot.json. rsms-results-storage-design.md §8 — design questions, not MVP blockers for chart 1 / fixed slices. |
Frontend (rsms-frontend-react)
| Status | Task | Notes |
|---|
| [ ] | Prefetch policy (optional) | If profiling shows hidden-tab ResultsPage work still hurts Maps, add defer heavy series until Results is foreground (rsms-results-prefetch-design — optional layer). |
| [ ] | Task 4 — Phase 3 context overlays | Pilots A (L00) and B (L08) shipped. Next candidates: L01 NPDES, L05/L06 pipeline & rail crossings — see rsms-task4-and-r5-layer-catalog.md, rsms-threat-layers-backlog.md. Map/UI only; no Fortran changes. |
| [ ] | USGS curated station list — refresh vs NWIS (deferred; after Task 4) | Legacy USGS_Stations_* inventory may include discontinued sites or miss new gages. Reconcile curated GeoJSON against waterservices site (active ST sites, HUC/RiversXref river scope); drop discontinued, add new, document refresh cadence. See rsms-threat-layers-backlog.md L00 follow-up. |
Azure ops & observability
| Status | Task | Notes |
|---|
| [ ] | Results tables — staging/prod parity | RBAC, connection strings/App Settings aligned across envs — see rsms-results-table-storage-rework-plan.md § Azure ops. |
| [ ] | Measured read latency | Document P95 (or comparable) Table + blob reads vs Sudhir ~0.13 s point-read benchmark — tune optional in-memory caching if warranted. |
Testing & quality
| Status | Task | Notes |
|---|
| [ ] | Frontend automated tests | No *.spec.*/*.test.* under rsms-frontend-react/src today; rsms-automated-testing-scope.md suggests Vitest + MSW/Playwright for auth + RBAC + one scenario/results flow. |
| [ ] | Worker full engine CI | Optional tier: EXEs + fixture CTL (rsms-automated-testing-scope.md §10) — skip by default unless dedicated pipeline exists. |
Bump meta.schemaVersion in ssot/rsms-ssot.json only when behavioral contracts change, not when this task list alone changes.